#include "input_library.h"

//第一次密码输入
void passInputOne(char *mm)
{
    int time=3,i=0,time2=3;   //输错计数time，数组序号i
    NEXT1:                                                  //gogo语句1
    NEXT2:                                                  //goto语句2
    printf("请输入您的密码：");
    for(i;i<20;i++)
    {
        mm[i]=getch();
        if(mm[i]=='\r')
        {
            if(i==0)
            {
                putchar(10);
                printf("密码输入不能为空。\n");
                memset(mm,0,20);
                i=0;
                goto NEXT1;                                                  //goto语句1
            }
            else if(i<3)
            {
                if(time2==0)
                {
                    putchar(10);
                    memset(mm,0,20);
                    printf("多次输入,请稍后再试。\n");
                    return;
                }
                time2--;
                putchar(10);
                printf("密码最少三位数,请重新输入。\n");
                memset(mm,0,20);
                i=0;
                goto NEXT2;                                                 //gogo语句2
            }
            break;
        }
        else
        {
            printf("*");
        }
    }
    mm[i]='\0';  //第i个是\r将它赋为\0;
    i=0;    //归零i
    putchar(10);
}

//第二次密码输入 n=1普通登录密码输入 n=0注册账号二次密码输入
void passInputTwo(char *tmp,int n)   //参数为一个数组
{
    if(n) printf("密码：");
    else printf("请再次输入密码确认：");
    int i=0;
    for(i;i<20;i++)
    {
        tmp[i]=getch();
        if(tmp[i]=='\r') break;
        else printf("*");
    }
    tmp[i]='\0';    //第i个是\r将它赋为\0;
    i=0;   //归零i
    putchar(10);
}     

//用户信息输入
void message(USERMES *user)  
{
    printf("请输入你的用户名：\n");
    scanf("%s",user->UserName);
    getchar();
    printf("请输入你的密保问题：\n");
    scanf("%s",user->RetrieveQuestion);
    getchar();
    printf("请输入答案以便找回密码：\n");
    scanf("%s",user->QuestionAnswer);
    getchar();
}

//隐藏终端显示字符输入getch()
char getch(void)  
{
    struct termios tm, tm_old;
    int fd = 0;
    char ch;

    if (tcgetattr(fd, &tm) < 0) {//保存现在的终端设置
        return -1;
    }

    tm_old = tm;
    cfmakeraw(&tm);//更改终端设置为原始模式，该模式下所有的输入数据以字节为单位被处理
    if (tcsetattr(fd, TCSANOW, &tm) < 0) {//设置上更改之后的设置
        return -1;
    }

    ch = getchar();
    if (tcsetattr(fd, TCSANOW, &tm_old) < 0) {//更改设置为最初的样子
        return -1;
    }

    return ch;
}